// ts中的抽象类，它是提供其他类继承的基类，不能直接被实例化

// 用abstract关键字定义抽象类和抽象方法
  // 抽象类中的抽象方法不包含具体实现并且必须在派生类中实现

// abstract抽象方法只能放在抽象类里面

// 抽象类和抽象方法用来定义标准
  // 标准：Animal这个类要求它的子类必须包含eat
  abstract class Animal{
    name: string
    constructor(name: string) {
      this.name = name
    }
  
    run() {
      console.log('非抽象方法，子类可以不实现');
    }
  
    // 报错：方法“eat”不能具有实现，因为它标记为抽象。
    // abstract eat(): any {}
    // 且g不包含具体实现
    abstract eat(): any
    // 若有子类继承，则子类必须实现eat()方法
  }
  
  // 报错：无法创建抽象类的实例。
  // let animal = new Animal()
  // 报错：非抽象类“Dog”没有实现继承自“Animal”类的抽象成员“eat”。
  class Dog extends Animal {
  // abstract class Dog extends Animal {
    constructor(name: string) {
      super(name)
    }
    eat(){
      console.log('yami yami')
    }
  }
  
  let dog = new Dog('花狗狗')
  // yamiyami
  dog.eat()

  export {}
  